package com.roads.project.mapper;

import java.util.List;
import com.roads.project.domain.ProPeriod;
import org.apache.ibatis.annotations.Param;

/**
 * 工期Mapper接口
 * 
 * @author nhp
 * @date 2021-12-22
 */
public interface ProPeriodMapper {

    /**
     * 根据主键ID查询详情
     *
     * @param id 工期主键
     * @return 工期
     */
    ProPeriod getModelById(Long id);

    /**
     * 获取最后一期
     *
     * @param institutionCode 标段编码
     * @return 最后一期
     */
    ProPeriod getLastPeriod(String institutionCode);

    /**
     * 获取当前计量期次
     *
     * @param institutionCode 标段编号
     * @return 当前计量期次
     */
    ProPeriod getCurrentPeriod(String institutionCode);

    /**
     * 获取最后锁定期次
     *
     * @param institutionCode 标段编号
     * @return 最后锁定期次
     */
    ProPeriod getLastLockPeriod(String institutionCode);

    /**
     * 根据项目获取当前计量期次，取第一个标段的当前期次
     *
     * @param projectId 项目ID
     * @return 当前计量期次
     */
    ProPeriod getCurrentPeriodByProjectId(Integer projectId);

    /**
     * 根据标段编号和工期名称获取工期详情
     *
     * @param institutionCode 标段编号
     * @param periodName 工期
     * @return 工期详情
     */
    ProPeriod getPeriodByPeriodName(@Param("institutionCode")String institutionCode, @Param("periodName") String periodName);

    /**
     * 设置当前计量期次
     *
     * @param institutionCode 标段编号
     * @param periodName 期次
     * @return 结果
     */
    int updateCurrentMeteragePeriod(@Param("institutionCode")String institutionCode,@Param("periodName") String periodName);

    /**
     * 设置除本期外所有期次为非当前计量期次
     *
     * @param institutionCode 标段编号
     * @param periodName 期次
     * @return 结果
     */
    int updateNotCurrentMeteragePeriod(@Param("institutionCode")String institutionCode,@Param("periodName") String periodName);

    /**
     * 锁定工期
     *
     * @param institutionCode 标段编号
     * @param periodName 期次
     * @return 结果
     */
    int lockPeriod(@Param("institutionCode")String institutionCode,@Param("periodName") String periodName);

    /**
     * 解锁工期
     *
     * @param institutionCode 标段编号
     * @param periodName 期次
     * @return 结果
     */
    int unlockPeriod(@Param("institutionCode")String institutionCode,@Param("periodName") String periodName);

    /**
     * 查询列表
     * 
     * @param model 工期
     * @return 工期集合
     */
    List<ProPeriod> selectModelList(ProPeriod model);

    /**
     * 根据项目ID获取工期，整个项目所有施工标段的去重查询
     *
     * @param projectId 项目ID
     * @return 工期集合
     */
    List<ProPeriod> selectPeriodNameListByProjectId(Integer projectId);

    /**
     * 获取比当前工期大的工期
     *
     * @param institutionCode 标段编码
     * @param periodId 工期ID
     * @return 工期集合
     */
    List<ProPeriod> selectBigPeriodList(@Param("institutionCode") String institutionCode,@Param("periodId") Long periodId);

    /**
     * 新增
     * 
     * @param model 工期
     * @return 结果
     */
    int insert(ProPeriod model);

    /**
     * 批量新增工期
     *
     * @param list 数据集合
     */
    void insertBatch(List<ProPeriod> list);

    /**
     * 批量修改工期
     *
     * @param list 数据集合
     */
    void updateBatch(List<ProPeriod> list);

    /**
     * 修改
     * 
     * @param model 工期
     * @return 结果
     */
    int update(ProPeriod model);

    /**
     * 删除
     * 
     * @param id 工期主键
     * @return 结果
     */
    int delete(Long id);

    /**
     * 批量删除
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteByIds(Long[] ids);

    /**
     * 根据标段编号删除工期
     *
     * @param institutionCode 标段编号
     * @return 结果
     */
    void deleteByInstitutionCode(@Param("institutionCode")String institutionCode);

}
